/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CONTABILIDAD_CONTROLADOR;

import CONTABILIDAD_MODELO.CON_AJUSTE_INFLACIONARIO;
import CONTABILIDAD_MODELO.CON_CENTRO_COSTO;
import CONTABILIDAD_MODELO.CON_COMPROBANTE;
import CONTABILIDAD_MODELO.CON_CUENTA_COMPROBANTE;
import CONTABILIDAD_MODELO.CON_CUENTA_CONTABLE;
import CONTABILIDAD_MODELO.CON_FECHA_CIERRE;
import CONTABILIDAD_MODELO.CON_MONEDA;
import Conexion.Conexion;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "CON_CUENTA_AJUSTE_INFLACION_CONTROLLER", urlPatterns = {"/CON_CUENTA_AJUSTE_INFLACION_CONTROLLER"})
public class CON_CUENTA_AJUSTE_INFLACION_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            
            CON_AJUSTE_INFLACIONARIO con_dif_cam = new CON_AJUSTE_INFLACIONARIO();
            con_dif_cam.setCon(con);
            
            CON_FECHA_CIERRE fecha = new CON_FECHA_CIERRE();
            fecha.setCon(con);                                        

            int mes=fecha.mesActual();
            int ano=fecha.anoActual();
                    
            List<List> lista = con_dif_cam.Generar(mes,ano);            
            
            CON_CUENTA_CONTABLE cuenta = new CON_CUENTA_CONTABLE(con);
            cuenta.setCon(con);  
            
            CON_COMPROBANTE comp = new CON_COMPROBANTE();
            comp.setCon(con);
            comp = comp.BuscarXRECURRENTE(3);


            CON_CUENTA_COMPROBANTE ccc = new CON_CUENTA_COMPROBANTE();
            ccc.setCon(con);
            List<CON_CUENTA_COMPROBANTE> listacuentas=ccc.Buscar(comp.getID());

            for (int i = 0; i < listacuentas.size(); i++) 
            {
                listacuentas.get(i).EliminarXid();
            }
            
            for (int i = 0; i < lista.size(); i++)
            {                
                String a = lista.get(i).get(0)+"";
                
                if(Double.parseDouble(lista.get(i).get(1)+"")!=0 || Double.parseDouble(lista.get(i).get(2)+"")!=0)
                {

                    con_dif_cam = con_dif_cam.Buscar(Double.parseDouble(a));
                    Double tc =con_dif_cam.getTIPO_CAMBIO();

                    CON_CENTRO_COSTO centro = new CON_CENTRO_COSTO(con);
                    if(con_dif_cam.getCODIGO_CENTRO_COSTO()!=null)
                    {
                        centro.setCon(con);
                        centro = centro.BuscarXCodigo(con_dif_cam.getCODIGO_CENTRO_COSTO());
                        cuenta.setCon(con);
                        cuenta =cuenta.BuscarXid(con_dif_cam.getID_CUENTA());
                    }
                    else
                    {

                        cuenta.setCon(con);
                        cuenta =cuenta.BuscarXid(con_dif_cam.getID_CUENTA());
                    }

                    
                    CON_CUENTA_COMPROBANTE cuentac = new CON_CUENTA_COMPROBANTE();
                    cuentac.setCon(con);
                    
                   
                    
                    //out.print("<td>"+con_dif_cam.getTIPO_CAMBIO()+"</td>");
                    CON_MONEDA moneda = new CON_MONEDA();
                    moneda.setCon(con);
                    moneda = moneda.BuscarXid(moneda.IdMonedaInflacionaria());
                                                    

                    Double debe = Double.parseDouble(lista.get(i).get(1)+"");
                    Double haber = Double.parseDouble(lista.get(i).get(2)+"");
                    
                    if(debe !=0.0 && haber!=0.0)
                    {
                        cuentac = new CON_CUENTA_COMPROBANTE(debe, 0.0, 0.0, debe/tc, 0.0, con_dif_cam.getGLOSA_DEBE(), cuenta.getID(), comp.getID(), centro.getID(), centro.getDESCRIPCION(), 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                        cuentac = new CON_CUENTA_COMPROBANTE(0.0, debe, 0.0, 0.0, debe/tc, con_dif_cam.getGLOSA_HABER(), con_dif_cam.getCUENTA_HABER(), comp.getID(), 0.0, "", 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                        cuentac = new CON_CUENTA_COMPROBANTE(0.0, haber, 0.0, 0.0, haber/tc, con_dif_cam.getGLOSA_HABER(), cuenta.getID(), comp.getID(), centro.getID(), centro.getDESCRIPCION(), 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                        cuentac = new CON_CUENTA_COMPROBANTE(haber, 0.0, 0.0, haber/tc, 0.0, con_dif_cam.getGLOSA_DEBE(), con_dif_cam.getCUENTA_DEBE(), comp.getID(), 0.0, "", 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                    }
                    if(debe==0.0 && haber!=0.0)
                    {
                        cuentac = new CON_CUENTA_COMPROBANTE(0.0, haber, 0.0, 0.0, haber/tc, con_dif_cam.getGLOSA_HABER(), cuenta.getID(), comp.getID(), centro.getID(), centro.getDESCRIPCION(), 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                        cuentac = new CON_CUENTA_COMPROBANTE(haber, 0.0, 0.0, haber/tc, 0.0, con_dif_cam.getGLOSA_DEBE(), con_dif_cam.getCUENTA_DEBE(), comp.getID(), 0.0, "", 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                    }
                    if(debe!=0.0 && haber==0.0)
                    {
                         cuentac = new CON_CUENTA_COMPROBANTE(debe, 0.0, 0.0, debe/tc, 0.0, con_dif_cam.getGLOSA_DEBE(), cuenta.getID(), comp.getID(), centro.getID(), centro.getDESCRIPCION(), 0.0);
                         cuentac.setCon(con);
                        cuentac.Insertar();
                        cuentac = new CON_CUENTA_COMPROBANTE(0.0, debe, 0.0, 0.0, debe/tc, con_dif_cam.getGLOSA_HABER(), con_dif_cam.getCUENTA_HABER(), comp.getID(), 0.0, "", 0.0);
                        cuentac.setCon(con);
                        cuentac.Insertar();
                    }                    
                }
            }
            
            response.sendRedirect("CONTABILIDAD/CON_COMPROBANTE.jsp?id="+comp.getID()+"&tipo="+comp.getTIPO());
            
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(CON_CUENTA_AJUSTE_INFLACION_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(CON_CUENTA_AJUSTE_INFLACION_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(CON_CUENTA_AJUSTE_INFLACION_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(CON_CUENTA_AJUSTE_INFLACION_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
